package com.yp.lession73.provider;

import com.yp.lession73.ResourceTable;
import com.yp.lession73.entity.City;
import com.yp.lession73.slice.MainAbilitySlice;
import ohos.aafwk.ability.AbilitySlice;
import ohos.agp.components.*;

import java.util.List;

/**
 * city list container 数据提供者(适配器)
 */
public class CityProvider extends BaseItemProvider {
    //保存要输出的数据列表
    private List<City>list;
    //为了给listContainer写出Item_city.xml
    private AbilitySlice slice;

    public CityProvider(List<City> listData, MainAbilitySlice mainAbilitySlice) {
    }

    /**
     * 获得数据总数
     * @return
     */
    @Override
    public int getCount() {
        //当list数据不为null即返回list元素个数,如果为null返回0
        return list==null?list.size():0;
    }

    /**
     * 返回数据对象的方法
     * @param i
     * @return
     */
    @Override
    public Object getItem(int i) {
        //判断 列表数据不为null  传入的i不能小于0  i的值必须在列表的范围之内
        if (list != null&&i>0&&i<list.size()){
            //返回单个数据
            return list.get(i);
        }
       return null;
    }

    /**
     * 返回列表下标值
     * @param i
     * @return
     */
    @Override
    public long getItemId(int i) {
        //直接原路即可
        return i;
    }

    /**
     * 返回布局组件使用的方法
     * @param i 下标
     * @param component 组件对象
     * @param componentContainer 组件容器
     * @return
     */
    @Override
    public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
        //判断 component 是否为null  有没有传入需要使用的 item_city的布局组件送进来
        if(component == null){
            component = LayoutScatter.getInstance(slice)
                    //parse是xml布局转为组件
                    //参数parse (布局组件id,跟组件,是否把布局组件的di对应的组件对象加入到根组件中)
                    .parse(ResourceTable.Layout_ability_city,null,false);
        }
        //数据的渲染
        //使用id 获取要渲染数据的text组件对象
        Text text = (Text) component.findComponentById(ResourceTable.Id_city_name);
        //从list中获取数据 设置进text组件,进行数据渲染
        City city = list.get(i);
        text.setText(city.getCityName());
        //返回已经渲染好数据的text组件 给container使用
        return text;
    }
}
